import axios from "axios";
import qs from "qs";
import {Message} from "view-design";
import config from "@/config";
import store from "@/store";

const {env, baseURL, timeout} = config;

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
//携带证书
axios.defaults.withCredentials = true;

// 创建 axios 实例
const ax = axios.create({
  baseURL: baseURL,
  timeout: timeout // 配置请求超时
});

// request拦截器
ax.interceptors.request.use(config => {
  if (config.method === 'get' && config.params){
    config.url = config.url+"?"+ qs.stringify(config.data)
    config.data = {}
  }
  // 让每个请求携带自定义token 请根据实际情况自行修改
  var uinfo = store.getters.getUserInfo;
  if (uinfo !== ""){
    config.headers['Authorization'] = 'Bearer ' + uinfo.auth_token
  }
  return config
}, error => {
  console.log(error)
  Promise.reject(error)
})


// 添加 axios 实例响应拦截器
ax.interceptors.response.use(
  response => {
    const {data} = response;
    // const {code, msg} = data["error"];
    const AUTH_TOKEN = data['data']['auth_token'] // 获取用户 AUTH_TOKEN
    if (AUTH_TOKEN) {
      setAuthToken(AUTH_TOKEN) // 配置默认参数
    }
    // 用户 TOKEN 失效
    if (data.code === 403) {
      store.commit("MENU_RESET"); // 重置菜单
    }
    // 判断开发环境
    if (env === "development" || env === "test") {
      if (data.code === 200) {
        // console.log(data.data); // 控制台输出响应数据
        return data.data; // 响应正确的数据
      }
      store.commit("RES_ERROR", response); // 响应错误数据
    } else {
      if (data.code === 200) {
        return data.data; // 响应正确的数据
      }
      Message.error(data.msg); // 提示错误信息
    }
  },
  error => {
    // console.log(error)
    const {response, message, config} = error;
    if (response) {
      store.commit("RES_ERROR", response); // 响应错误数据
    } else {
      Message.error({
        content: message
      });
    }
    console.log(config);
  }
);

// 配置默认参数
const setAuthToken = AUTH_TOKEN => {
  // 配置用户 AUTH_TOKEN
  ax.defaults.headers.common["Authorization"] = AUTH_TOKEN;
};

// 刷新重新配置默认参数
const userInfo = sessionStorage.getItem("userInfo");
if (userInfo) {
  setAuthToken(JSON.parse(userInfo)["auth_token"]); // 配置默认参数
}

export default ax;
